package ui.juego.mapamundi

import dominio.ubicaciones.Pais
import dominio.ubicaciones.Lugar
import org.uqbar.commons.utils.Observable
import org.uqbar.commons.model.ObservableUtils
import java.util.List
import dominio.ubicaciones.Embajada
import dominio.ubicaciones.Banco
import java.util.ArrayList
import dominio.ubicaciones.Club
import dominio.ubicaciones.Biblioteca
import org.uqbar.commons.model.UserException

@Observable
class EditarLugar {
	
	@Property Pais pais
	@Property Lugar lugarSeleccionado
	@Property Lugar lugarPosibleSeleccionado
	@Property List<Lugar> lugaresPosibles
	
	new(Pais pais) {
		this.pais = pais
		actualizarPosibles
	}
	
	private def void actualizarPosibles() {
		lugaresPosibles = todosLosLugares.filter[l1 | 
			!pais.lugares.exists[l2 | l1.nombreTipoLugar ==  l2.nombreTipoLugar]
		].toList
		ObservableUtils.firePropertyChanged(this, "lugaresPosibles", lugaresPosibles)		
	}
	
	def todosLosLugares() {
		new ArrayList<Lugar> => [
			add(new Embajada(pais))
			add(new Banco(pais))
			add(new Biblioteca(pais))
			add(new Club(pais))	
		]
	}
	
	def eliminarLugarSeleccionado() {
		if(lugarSeleccionado != null) {
			lugaresPosibles += lugarSeleccionado
			pais.lugares.remove(lugarSeleccionado)
		} else throw new UserException("No hay un lugar seleccionado!")
		ObservableUtils.firePropertyChanged(pais,"lugares", pais.lugares)
		actualizarPosibles
		ObservableUtils.firePropertyChanged(this, "lugaresPosibles", lugaresPosibles)				
	}
	
	def agregarLugarPosibleSeleccionado() {
		if(lugarPosibleSeleccionado != null)
			pais.agregarLugar(lugarPosibleSeleccionado)
		else throw new UserException("No hay un lugar seleccionado!")
		actualizarPosibles
		ObservableUtils.firePropertyChanged(this, "lugaresPosibles", lugaresPosibles)
	}
	
		
	
}